<?php
// $Id$

/**
 * admin panel for spread the schedule
 */
// TODO: add some validation
/**
 * hook_form() implementation
 */
 function jadwal_admin_make(&$form_state) {
   $sql = "select {node}.\$key, {node}.\$value from {node} where {node}.type = '%s'";
   $args = array('kurikulum');
   $druais_numberof_class = variable_get('druais_numberof_class', 0);
   
   $kurikulum = druais_dbfilloptions($sql, 'nid', 'title', $args);
   for($i=1; $i<=$druais_numberof_class; $i++) {
     $kelas[$i] = $i;
   }
   
   // TODO: tambahkan query untuk mencari title dari node kurikulum untuk $kurikulum dengan key nid dan value title
   
   $form['select_kurikulum'] = array(
     '#type' => 'select',
     '#title' => 'Kurikulum',
     '#description' => t('Select kurikulum'),
     '#options' => $kurikulum
   );
   // TODO: translate it
   $form['class_hour'] = array(
     '#type' => 'textfield',
     '#title' => 'Jam masuk',
     '#description' => t('Masukkan jam masuk kelasnya'),
     '#default_value' => variable_get('jadwal_jam_masuk', 7),
     '#size' => 4
   );
   
   $form['class'] = array(
     '#type' => 'select',
     '#title' => 'Kelas',
     '#description' => t('Pilih kelas untuk jadwal ini'),
     '#options' => $kelas
   );
   
   $form['work_hour'] = array(
     '#type' => 'textfield',
     '#title' => 'Jam kerja',
     '#description' => t('Masukkan jam kerja yang sesuai dengan kelas dan kurikulum yang dipilih'),
     '#default_value' => variable_get('jadwal_jam_kerja', 8),
     '#size' => 4
   );
   
   $form['make_schedule_submit'] = array(
     '#type' => 'submit',
     '#value' => t('Bagikan jadwal'),
     '#submit' => array('jadwal_spread')
   );
   
   return $form;
 }
 
 /**
  * jadwal_spread
  * 
  * function to handle spreading schedule
  */
 
 function jadwal_spread($form, $form_state) {
   $emptyday = variable_get('jadwal_emptyday', NULL);
   $class_hour = (int) $form_state['value']['class_hour'];
   $start_hour = HOUR * $class_hour;
   
   $query = "select n.nid nid, n.title title, ki.durasi durasi, ";
   $total_semester = variable_get('druais_total_semester', 0);
   for ($i=1; $i<=$total_semester; $i++) {
     $query .= 'ki.durasi_semester_'.$i.' as durasi_semester_'.$i;
     if ($i != $total_semester) {
       $query .= ', ';
     } else {
       $query .= ' ';
     }
   }
   $query .= "from {node} n, {kurikulum_item} ki where ki.kurikulum_nid = %d and n.nid = ki.nid";
//   echo $query;
   $result = db_query($query, $form_state['value']['select_kurikulum']);
   $record = 0;
   while ($db = db_fetch_array($result)) {
     $durasi = $db['durasi'];
     $semcount = 0;
     for ($i=1; $i<=$total_semester; $i++) {
       if ($db['durasi_semester_'.$i] != 0) {
         $weekduration[$i] = $db['durasi_semester_'.$i]*(45*MINUTES);    // 45 minutes = 1 study hour
         $semcount++;
       }
     }
     $durasipersemester = (int) ($durasi / $semcount);
     foreach ($weekduration as $semester => $duration) {
       $processedday = $emptyday;
       $worktime = $processedday+$start_hour;
       
       $nodecontent = array(
         'title' => $db['title'],
         'value' => $worktime,
         'value2' => $worktime+$duration,
         'class' => _jadwal_semtoclass($semester)
       );
       jadwal_node_posting($nodecontent);
     }
     
     
     $record++;
   }
   
   // TODO: tambahkan fungsi untuk membagi jadwal dari kurikulum
   // TODO: query dari database dan simpan hasilnya di tabel temporary. kurikulum item untuk kurikulum
   // TODO: bila kurikulum item hanya ditujukan pada semester tertentu atau kelas tertentu, bagi durasinya menjadi atomik sesuai jumlah kelas dan atau semester yang dituju.
   // TODO: bagi jadwalnya dengan cara:
   //        salin durasi yang telah atomik, buat event dengan durasi yang sesuai dengan durasi per minggu, dan kurangi durasi atomik yang telah disalin dengan durasi per minggu. ulangi hingga durasi atomik yang telah disalin habis. atau
   //        buat counter, buat event dengan durasi yang sesuai dengan durasi per minggu, dan tambah counter dengan durasi per minggu. ulangi hingga jumlah counter sama dengan jumlah durasi atomik. 
 }

/**
 * Helper function to count mod and div result
 * count mod and div result
 * @param integer $source
 * @param integer $divider
 */
function _jadwal_moddiv($source, $divider) {
  $return['mod'] = $source % $divider;
  $return['div'] = (int) ($source / $divider);
  return $return;
}

/**
 * Helper function to find class by semester
 */
function _jadwal_semtoclass($semester) {
  $current = _jadwal_moddiv($semester, 2);
  $next = _jadwal_moddiv(($semester+1), 2);
  if ($next['mod'] == 0) {
    $class = (int) (($semester % $next['div'])+1); 
  } else {
    $class = $current['div'];
  }
  return $class; 
}

function _jadwal_getweekday($emptyday) {
  
}